package xoroperation;

/**
 * Created by L.jp
 * Description:
 * User: 86189
 * Date: 2023-01-09
 * Time: 23:37
 */
//不使用额外变量交换两个数就可以使用异或运算
public class SwapTwoNum {
    public static void main(String[] args) {
        int a = 20;
        int b = 30;
        
        System.out.println(a);
        System.out.println(b);
        
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
    
    
        System.out.println(a);
        System.out.println(b);
    
    
        //交换数组的两个数
        int[] arr = {3, 1, 100};
    
        int i = 0;
        int j = 1;
    
        //i和j必须是不相同的才可以，除非i和j相同但是指向不同的内存空间，因为i和j相同的话交换的是同一个数，使用异或运算得到的全是0
        arr[i] = arr[i] ^ arr[j];
        arr[j] = arr[i] ^ arr[j];
        arr[i] = arr[i] ^ arr[j];
    
        System.out.println(arr[i] + " , " + arr[j]);
    
    
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    
        swap(arr, 1, 2);
    
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    
    
    }
    
    ////i和j必须是不相同的才可以，除非i和j相同但是指向不同的内存空间，因为i和j相同的话交换的是同一个数，使用异或运算得到的全是0
    public static void swap (int[] arr, int i, int j) {
        // arr[0] = arr[0] ^ arr[0];
        arr[i]  = arr[i] ^ arr[j];
        arr[j]  = arr[i] ^ arr[j];
        arr[i]  = arr[i] ^ arr[j];
    }
    
}
